import json
import backtrader as bt
from ctpbeebt.ctpstore import CTPStore
from strategies.strategy_002 import StrategyLookBar
from datetime import datetime, time

#说明在交易日上午8点45到下午3点，以及晚上8点45到凌晨2点45分，可进行实时行情模拟交易。
#中国期货交易时段(日盘/夜盘)，只有在交易时段才能进行实时模拟仿真，其他时段只能进行非实时模拟仿真。双休日不能进行模拟仿真
DAY_START = time(8, 45) #日盘8点45开始
DAY_END = time(19, 0) #下午3点结束
NIGHT_START = time(20, 45) #夜盘晚上8点45开始
NIGHT_END = time(2, 45) #凌晨2点45结束


#是否在交易时段
def is_trading_period():
    """
    """
    current_time = datetime.now().time()
    trading = False
    if ((current_time >= DAY_START and current_time <= DAY_END)
        or (current_time >= NIGHT_START)
        or (current_time <= NIGHT_END)):
        trading = True
    return trading


if __name__ == '__main__':
    with open('./params-template.json', 'r') as f:
        ctp_setting = json.load(f)

    cerebro = bt.Cerebro(live=True)

    store = CTPStore(ctp_setting, debug=True)
    cerebro.addstrategy(StrategyLookBar)

    data0 = store.getdata(dataname='cu2312.SHFE', timeframe=bt.TimeFrame.Minutes,  # 注意符号必须带交易所代码。
                          num_init_backfill=100 if is_trading_period() else 0)  # 初始回填bar数，使用TEST服务器进行模拟实盘时，要设为0

    cerebro.adddata(data0)
    cerebro.run()